<?php

class Instelling {
    static private $_dit = null;
    private $_instelling = [];
    
    private function __construct() {
        $dbVerbinding = Db::GET();
        $dbSql = "SELECT * FROM instelling ORDER BY sleutelpad";
        try {
            $dbResultaat = $dbVerbinding->query($dbSql);
            if ($dbResultaat->rowCount() == 0) {
                die('FATAAL... GEEN INSTELLINGEN GEVONDEN...');
            }
            
            while ($dbRij = $dbResultaat->fetch(PDO::FETCH_ASSOC)) {
                $this->_instelling[strtolower($dbRij['sleutelpad'])] = $dbRij['waarde'];
            }
        } 
        catch (Exception $ex) {
            echo $ex->getMessage();
        }
    }
    
    /**
     * methode haalt waarde van sleutel op
     * @param string $sleutel
     */
    static public function GET($sleutel = '') {
        if (!(self::$_dit instanceof self)) {
            self::$_dit = new self();
        }
        
        $sleutel = strtolower(trim($sleutel));
        if (array_key_exists($sleutel,self::$_dit->_instelling)) {
            if (!empty(self::$_dit->_instelling[$sleutel])) {
                return self::$_dit->_instelling[$sleutel]; 
            }
            
            $resultaat = [];
            foreach(self::$_dit->_instelling as $sleutelPad => $waarde) {
                if (preg_match("/^$sleutel/",$sleutelPad)) {
                    if ($sleutel != $sleutelPad) {
                        $sleutelPad = preg_replace("/^$sleutel./","",$sleutelPad);
                        $resultaat[$sleutelPad] = $waarde;
                    }
                }
            }
            
            if (count($resultaat) == 0) {
                return false;
            }
            else {
                return $resultaat;
            }
        }
        else {
            return false;
        }
    }
    /**
     * methode kent waarde aan sleutel toe (dynamisch)
     * @param string $sleutel
     * @param string $waarde
     */
    static public function SET($sleutel = '', $waarde='') {
        if (!(self::$_dit instanceof self)) {
            self::$_dit = new self();
        }
        
        $sleutel = strtolower(trim($sleutel));
        if (array_key_exists($sleutel,self::$_dit->_instelling)) {
            self::$_dit->_instelling[$sleutel] = $waarde;
            return true;
        }
        else {
            return false;
        }
    }
    
    /**
     * methode zet dynamische waarde aan sleutel
     * en past waarde aan in database
     * @param type $sleutel
     * @param type $waarde
     */
    static public function UPDATE($sleutel = '', $waarde='') {
        if (!(self::$_dit instanceof self)) {
            self::$_dit = new self();
        }
        
        $sleutel = strtolower(trim($sleutel));
        if (self::$_dit->SET($sleutel,$waarde)) {
            $dbVerbinding = Db::GET();
            $dbSql = "UPDATE instelling SET waarde=:waarde WHERE sleutelpad=:sleutel";
            try {
                $dbStmt = $dbVerbinding->prepare($dbSql);
                $dbStmt->bindParam(':waarde',$waarde,PDO::PARAM_STR);
                $dbStmt->bindParam(':sleutel',$sleutel,PDO::PARAM_STR);
                $dbStmt->execute();
                return true;
            } 
            catch (PDOException $ex) {

            }
        }
        else {
            return false;
        }
    }
}
